// 因为token很多组件都需要使用，所以将token值存储在vuex中
import { login, getProfile, getUserInfoById } from '@/api/user'
import router from '@/router'

const state = {
  // 如果本地存储有token的话，直接从本地存储获取。设置后可以看到vuex刷新之后，token值还存在
  token: localStorage.getItem('token') || '',
  profile: {}
}
const mutations = {
  setToken(state, data) {
    // 将token存储到本地存储
    localStorage.setItem('token', data)
    localStorage.setItem('setTime', Date.now())
    state.token = data
  },
  setProfile(state, data) {
    state.profile = data
  },
  clearToken(state) {
    localStorage.removeItem('token')
    state.token = ''
  },
  clearProfile(state) {
    state.profile = {}
  }
}
const actions = {
  // 异步发送数据请求
  async login(store, data) {
    const res = await login(data)
    // 在返回数据之前，即执行下面的代码之前，会通过响应拦截器，如果是用户名和密码都正确的话，才会执行下面的代码
    console.log('获取数据')
    // 将token值存储,通知mutation存储,res.data.data就是token值
    store.commit('setToken', res)
  },
  async getProfile(store) {
    const res = await getProfile()
    const userInfo = await getUserInfoById(res.userId)
    store.commit('setProfile', { ...res, ...userInfo })
    console.log('profile', store.state.profile)
  },
  loginOut(store) {
    store.commit('clearToken')
    store.commit('clearProfile')
    router.push('/login')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

